//-- JS-Form-Creator

//如果没有jQuery 则进行引入并提示
var KSFormCreator =function(){
    
    var _self=this; //
    
    /**
     * 获取请求类
     * @return string
     */
    _self.getVersion=function(){
        return '1.0.1';
    };
    
};

//添加内部常量
KSFormCreator.CONST_API_MASK_CODE=1000000;  //1开头表示顶级类;

//异常信息
KSFormCreator.CONST_ERROR_CODE_API_NEED_JQUERY=KSFormCreator.CONST_API_MASK_CODE+1; //Did not find the JQUERY class library, the API needs its support
KSFormCreator.CONST_ERROR_CODE_FORM_CELL_TYPE_ERROR=KSFormCreator.CONST_API_MASK_CODE+2; //Form type is not valid
KSFormCreator.CONST_ERROR_CODE_FORM_CELL_NOT_FIND_ELEMENT_FROM_TEMPLATE=KSFormCreator.CONST_API_MASK_CODE+3; //Form type is not valid

//系统支持的模板信息
KSFormCreator.CONST_TEMPLATE_CATEGORY_IS_BOOTSTRAP='bootstrap' ;//Boot strap 格式

/**
 * 获取出错信息
 * @param error_code int 错误代码 
 * */
KSFormCreator.prototype.getErrorInfo=function(error_code){
    var error_info_arr=new Array();
    
    error_info_arr[KSFormCreator.CONST_ERROR_CODE_API_NEED_JQUERY]='Did not find the JQUERY class library, the API needs it!';
    error_info_arr[KSFormCreator.CONST_ERROR_CODE_FORM_CELL_TYPE_ERROR]='Form type is not valid!';
    error_info_arr[KSFormCreator.CONST_ERROR_CODE_FORM_CELL_NOT_FIND_ELEMENT_FROM_TEMPLATE]='Not find the element from template!';
    
    return error_info_arr[error_code];
};


/**
 * 设置图纸
 * */
KSFormCreator.prototype.setMap=function(map_json){
    var _self=this;
    KSFormCreator.prototype.map_json=map_json;
    return _self;
};

/**
 * 获取图纸
 * */
KSFormCreator.prototype.getMap=function(){
    return KSFormCreator.prototype.map_json;
};



/**
 * 生成表单元素
 * */
KSFormCreator.prototype.makeForm=function(parent_dom){
    var _self=this;
    var map_json=_self.getMap(); //获取JSON 信息
    var form = $(_self.getCellTemplate('form'),[],_self.getTemplateCategory());
    form.attr('action',map_json.action);
    form.attr('method',map_json.method);
    
    //接下来循环具体的cell
    for(var i=0; i<map_json.cell.length; i++){
        //获取当前表单元素定义
        var sub_cell=map_json.cell[i];
        //var sub_cell_attr=KSFormCreator.GetCellAttr(i,map_json); //获取下标元素的默认属性，这个分析函数是静态的
        
        switch(sub_cell.type.toLowerCase()){
            case "text" :
                //如果是文本，则该任务交给文本添加方法进行处理，以降低单函数复杂度
                //参数分别是cell 下标，父节点对象
                _self.makeInputText(sub_cell,form);
                break;
            case "submit" :
                _self.makeInputSubmit(sub_cell,form);
                break;
            case "checkbox" :
                _self.makeInputCheckbox(sub_cell,form);
                break;    
            case "radio" :
                _self.makeInputRadio(sub_cell,form);
                break;        
            case "select" :
                _self.makeTagSelect(sub_cell,form);
                break;            
            case "textarea" :
                _self.makeTagTextarea(sub_cell,form);
                break;            
        }
        
    }
    
    $(parent_dom).append(form);//将这个表单追加到带入的节点元素
    return _self;
};

/**
 * API 构造方法
 * */
KSFormCreator.prototype.init=function(){
    if('undefined' === typeof(jQuery)){
        throw new Error(KSFormCreator.CONST_ERROR_CODE_API_NEED_JQUERY , _self.getErrorInfo(KSFormCreator.CONST_ERROR_CODE_API_NEED_JQUERY));
    }
    init(); //立即执行构造方法
};

/**
 * 创建一个FEApi
 * @return FEApi
 */
KSFormCreator.Create=function(){
    var formcreator=new KSFormCreator();
    return formcreator;
};


/**
 * 获取图纸上CELL 节点的属性信息
 * */
KSFormCreator.GetCellAttr=function(index,map_json){
    
    //获取当前表单元素定义
    var sub_cell=map_json.cell[index];
    //获取默认设置，这个是默认的样式
    var default_attr=map_json.default.attr; //当然有可能是空的，这里应该适应数组
    if(undefined === typeof(default_attr)) {
        default_attr=new Array(); //统一格式
    }
    if(undefined !== typeof(sub_cell.attr) && 0 < sub_cell.attr.length) {
        //如果定义了attr 就要进行循环
        for(var x=0; x<sub_cell.attr.length; x++){
            default_attr.push(sub_cell.attr[x]); //将新加的元素全部写入到默认数组中，不进行排重处理因为设置时新的会覆盖老的，暂时不计效率损失
        }
    }
    
    return default_attr;
};
